
/*=========================================
* Author: Administrator
* DateTime:2017/6/20 18:29:33
* Description:$safeprojectname$
==========================================*/

using System;
using PureMVC.Interfaces;
using PureMVC.Patterns;
using UnityEngine;
using UnityEngine.EventSystems;

namespace OrderSystem
{
    /// <summary>
    /// 系统启动命令，继承自SimpleCommand
    /// 负责在应用启动时注册所有核心代理(Proxy)和中介者(Mediator)
    /// </summary>
    internal class StartUpCommand : SimpleCommand 
    {
        /// <summary>
        /// 执行启动命令
        /// 注册订单系统所需的所有代理和中介者，并注册核心业务命令
        /// </summary>
        /// <param name="notification">启动通知，包含MainUI实例</param>
        public override void Execute(INotification notification)
        {
            // 注册菜单代理 - 管理菜品数据和菜单业务逻辑
            MenuProxy menuProxy = new MenuProxy();
            Facade.RegisterProxy(menuProxy);


            // 注册客户代理 - 管理客户数据和客户相关业务逻辑
            ClientProxy clientProxy = new ClientProxy();
            Facade.RegisterProxy(clientProxy);

            // 注册服务员代理 - 管理服务员数据和服务业务逻辑
            WaiterProxy waitProxy = new WaiterProxy();
            Facade.RegisterProxy(waitProxy);

            // 注册厨师代理 - 管理厨师数据和烹饪业务逻辑
            CookProxy cookProxy = new CookProxy();
            Facade.RegisterProxy(cookProxy);

            // 注册订单代理 - 管理订单数据和订单处理逻辑
            OrderProxy orderProxy = new OrderProxy();
            Facade.RegisterProxy(orderProxy);

            // 注册酒店代理 - 管理酒店房间数据和服务逻辑
            HotelProxy hotelProxy = new HotelProxy();
            Facade.RegisterProxy(hotelProxy);

            MainUI mainUI = notification.Body as MainUI;


            // 验证主UI实例是否有效
            if(null == mainUI)
                throw new Exception("程序启动失败: 主UI实例为空");
            // 注册菜单中介者 - 协调菜单视图与业务逻辑
            Facade.RegisterMediator(new MenuMediator(mainUI.MenuView));
            // 注册客户中介者 - 协调客户视图与业务逻辑
            Facade.RegisterMediator(new ClientMediator(mainUI.ClientView)); 
            // 注册服务员中介者 - 协调服务员视图与业务逻辑
            Facade.RegisterMediator(new WaiterMediator(mainUI.WaitView));
            // 注册厨师中介者 - 协调厨师视图与业务逻辑
            Facade.RegisterMediator(new CookMediator(mainUI.CookView));
            // 注册房间中介者 - 协调房间视图与业务逻辑
            Facade.RegisterMediator(new HotelMediator(mainUI.HotelView));


            // 注册客户离开命令 - 处理客户离开业务逻辑
            Facade.RegisterCommand(OrderSystemEvent.GUEST_BE_AWAY,typeof(GuestBeAwayCommed));
            // 注册获取订单命令 - 处理订单提交与结算逻辑
            Facade.RegisterCommand(OrderSystemEvent.GET_ORDER,typeof(GetAndExitOrderCommed));
            // 注册厨师烹饪命令 - 处理菜品烹饪业务逻辑
            Facade.RegisterCommand(OrderSystemEvent.CookCooking, typeof(CookCommend));
            // 注册服务员选择命令 - 处理服务员分配业务逻辑
            Facade.RegisterCommand(OrderSystemEvent.selectWaiter, typeof(WaiterCommend));
            // 注册酒店服务命令 - 处理酒店服务员分配业务逻辑
            Facade.RegisterCommand(OrderSystemEvent.HotelCommend, typeof(HotelCommend));
        }
    }
}